package com.xuecheng.content.service.impl;

import com.xuecheng.content.mapper.CourseCategoryMapper;
import com.xuecheng.content.model.dto.CourseCategoryTreeDto;
import com.xuecheng.content.service.CourseCategoryService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Slf4j
@RequiredArgsConstructor
public class CourseCategoryServiceImpl implements CourseCategoryService {

    private final CourseCategoryMapper courseCategoryMapper;

    /**
     * 程分类树形结构查询
     * @param id 节点
     * @return 课程类型
     */
    @Override
    public List<CourseCategoryTreeDto> queryTreeNodes(String id) {
        List<CourseCategoryTreeDto> courseCategoryTreeDtos = courseCategoryMapper.selectTreeNodes(id);
        Map<String, CourseCategoryTreeDto> mapTemp = new HashMap<>();

        // 最终返回的 list（存储根节点的直接子节点）
        List<CourseCategoryTreeDto> categoryTreeDtos = new ArrayList<>();

        // 1. 先构造 Map（过滤掉根节点）
        for (CourseCategoryTreeDto item : courseCategoryTreeDtos) {
            if (!id.equals(item.getId())) {
                mapTemp.put(item.getId(), item);
            }
        }

        // 2. 直接遍历 `courseCategoryTreeDtos`，构建树
        for (CourseCategoryTreeDto item : courseCategoryTreeDtos) {
            if (id.equals(item.getId())) {
                continue; // 跳过根节点
            }
            // 获取父节点
            CourseCategoryTreeDto parent = mapTemp.get(item.getParentid());
            if (parent == null) {
                // 直接添加到结果列表，说明是根节点的直接子节点
                categoryTreeDtos.add(item);
            } else {
                // 父节点存在，将当前节点加入父节点的 children 列表
                if (parent.getChildrenTreeNodes() == null) {
                    parent.setChildrenTreeNodes(new ArrayList<>());
                }
                parent.getChildrenTreeNodes().add(item);
            }
        }

        return categoryTreeDtos;
    }

}
